#ifndef QCGROUPEDLISTVIEW_H
#define QCGROUPEDLISTVIEW_H

#include <QListView>
#include <QMap>

// 主要实现branch的显示与交互（通过数据模型的hasChildren方法来判断是否进行branch交互）
// NB：不负责维护管理根节点的expanded状态，须由用户自行管理。
//     用户单击branch之后，触发toggleExpandedState信号
class QcGroupedListView : public QListView
{
    Q_OBJECT
public:
    explicit QcGroupedListView(QWidget *parent = nullptr);

    int branchWidth() const { return branchWidth_; }
    void setBranchWidth(int w) { branchWidth_ = w; }

    int hoverBranchRow() const { return hoverBranch_; }

signals:
    void toggleExpandedState(const QModelIndex& index);

protected:
    bool viewportEvent(QEvent *event) override;

    void mousePressEvent(QMouseEvent *event) override;

private:

    // 若pt位于branch上方，返回该branch所在行号，否则返回-1
    int branchAt_(const QPoint& pt) const;

    QRect branchRect_(int row) const;

private:
    int hoverBranch_{ -1 };
    int branchWidth_{ 24 };
};

#endif // QCGROUPEDLISTVIEW_H
